import axios from 'axios';
import { ElMessage, ElMessageBox } from 'element-plus';
import { Session } from '/@/utils/storage';

// 配置新建一个 axios 实例
const service = axios.create({
	baseURL: import.meta.env.VITE_API_URL as any,
	timeout: 5000,
	headers: { 'Content-Type': 'application/json' },
	// retry: 3, //设置全局重试请求次数（最多重试几次请求）
	// retryDelay: 1000, //设置全局请求间隔
});

// 添加请求拦截器
service.interceptors.request.use(
	(config) => {
		// 在发送请求之前做些什么 token
		if (Session.get('token')) {
			(<any>config.headers).common['Authorization'] = `Bearer ${Session.get('token')}`;
		}
		return config;
	},
	(error) => {
		// 对请求错误做些什么
		return Promise.reject(error);
	}
);

// 添加响应拦截器
service.interceptors.response.use(
	(response) => {
		// 对响应数据做点什么
		const res = response.data;
		const fileType = ["application/pdf", "application/msword", "application/zip", "application/x-rar-compressed", "application/vnd.ms-excel", "image/jpeg", "image/png"]

		if (res.code != 200) {
			if (fileType.indexOf(response.headers["content-type"]) != -1) {
				//获取文件名
				let fileName = response.headers["content-disposition"].split(";")[1].split("=")[1]
				// 去掉引号
				fileName = fileName.replace(/\"/g, "")

				return {
					fileName: fileName,
					res: res,
					type: response.headers["content-type"]
				}

			} else {

				// const fileReader = <any>new FileReader()

				// fileReader.onloadend = () => {
				// 	try {
				// 		const jsonData = JSON.parse(fileReader.result) // 说明是普通对象数据，后台转换失败
				// 		// 后台信息
				// 		ElMessage.error(jsonData.msg)
				// 	} catch (err) {
				// 		// 解析成对象失败，说明是正常的文件流
				// 		// 下载文件
				// 		console.log("ss", err)
				// 	}
				// }
				// // ElMessage({
				// // 	message: res.msg || 'Error',
				// // 	type: 'error',
				// // 	duration: 5 * 1000
				// // })
				// fileReader.readAsText(res)
				return res
			}

		} else {

			return res
		}
		// if (res.code && res.code == 0) {
		// 	// `token` 过期或者账号已在别处登录
		// 	if (res.code === 401 || res.code === 4001) {
		// 		Session.clear(); // 清除浏览器全部临时缓存
		// 		window.location.href = '/'; // 去登录页
		// 		ElMessageBox.alert('你已被登出，请重新登录', '提示', {})
		// 			.then(() => { })
		// 			.catch(() => { });
		// 	}
		// 	ElMessage.error(res.msg || "请求出错")
		// 	return Promise.reject(service.interceptors.response);
		// } else {
		// 	return response.data;
		// }
	},
	(error) => {
		// 对响应错误做点什么
		if (error.message.indexOf('timeout') != -1) {
			return ElMessage.error('网络超时');
		} else if (error.message == 'Network Error') {
			return ElMessage.error('网络连接错误');
		} else {
			if (error.response.data) {
				return ElMessage.error(error.response.statusText);
			}
		}
		switch (error.response.status) {
			case 400:
				ElMessage({
					message: "请求错误(400)",
					type: 'error',
					duration: 5 * 1000,
				})
				break
			case 401:
				ElMessage({
					message: "未授权，请重新登录(401)",
					type: 'error',
					duration: 5 * 1000,
				})
				break
			case 403:
				ElMessage({
					message: "拒绝访问(403)",
					type: 'error',
					duration: 5 * 1000,
				})
				break
			case 404:
				ElMessage({
					message: "请求出错(404)",
					type: 'error',
					duration: 5 * 1000,
				})
				break
			case 500:
				ElMessage({
					message: "服务器错误(500)",
					type: 'error',
					duration: 5 * 1000,
				})
				break
			case 501:
				ElMessage({
					message: "服务未实现(501)",
					type: 'error',
					duration: 5 * 1000,
				})
				break
			case 502:
				ElMessage({
					message: "网络错误(502)",
					type: 'error',
					duration: 5 * 1000,
				})
				break
			case 503:
				ElMessage({
					message: "服务不可用(503)",
					type: 'error',
					duration: 5 * 1000,
				})
				break
			default:
				ElMessage({
					message: `连接出错(${error.response.status})!`,
					type: 'error',
					duration: 5 * 1000,
				})

		}
		// return Promise.reject(error);
		return error;
	}
);

// 导出 axios 实例
export default service;
